# 离线声纹Linux SDK
# 功能简介
声纹识别SDK基于科大讯飞MorfeiCore AIOT架构构建,通过说话人特定的语音片段,利用声纹识别技术,对说话人的身份进行判断。本文主要描述声纹识别相关接口及调用流程,用于指导开发人员快速进行声纹识别集成。
# 名词解释
| 名词 | 说明 | 
|---|---|
| 声纹识别 | 根据语音中反映的说话人生理和行为特征,自动识别说话人身份的生物识别技术。 | 
| VPR | Voiceprint Recognition | 
# 授权说明
授权方式目前只支持云端授权方式。
云端授权方式:使用云端授权方式,设备需要具备联网能力。在启动声纹识别服务前设备需要联网,否则SDK无法通过网络获取授权,SDK能力将无法使用。在购买SDK开发包后,科大讯飞为每台设备分配productid (每个产品唯一)和deviceid(每台设备唯一),开发者在启动声纹识别服务时通过相应接口将productid和deviceid传入SDK。
# 相关约定说明
文档中使用的符号约定:
| 符号 | 含义 | 
|---|---|
| [in] | 表明该参数是调用时赋值的参数——输入参数 | 
| [out] | 该参数在函数返回时被赋值——输出参数 | 
| [in/out] | 该参数在函数调用时作为输入、函数返回时作为输出参数 | 
# 声纹唤醒SDK接口说明
# 接口调用流程
声纹识别接口基本功能使用,调用流程包括以下几个步骤(图2-1):
(1) MorfeiCore服务初始化
(2) 声纹引擎初始化
(3) 声纹资源加载
(4) 引擎参数设置
(5) 声纹信息注册
(6) 声纹实例创建
(7) VPR回调函数注册
(8) 启动声纹实例
(9) 写入音频,回调抛出识别结果
(10) 停止声纹实例
(11) 销毁声纹实例
(12) 卸载声纹资源
(13) 声纹引擎逆初始化
(14) MorfeiCore 服务逆初始化

# MorfeiCore 接口函数列表
| 函数名称 | 功能简介 | 
|---|---|
| morfeicore_start | 初始化MorfeiCore 服务 | 
| morfeicore_stop | 逆初始化MorfeiCore 服务 | 
| morfeicore_getversion | 获取MorfeiCore版本号 | 
# VPR接口函数列表
| 函数名称 | 功能简介 | 
|---|---|
| VPRInit | 初始化VPR引擎 | 
| VPRUninit | 逆初始化VPR引擎 | 
| VPRGetVersion | 获取VPR引擎版本号 | 
| VPRLoadResource | 加载VPR资源 | 
| VPRUnloadResource | 删除VPR资源 | 
| VPRRegister | 注册VPR资源 | 
| VPRCreateInst | 创建VPR引擎实例 | 
| VPRDestoryInst | 销毁VPR引擎实例 | 
| VPRSetListener | 设置VPR回调接口 | 
| VPRGetParam | 获取VPR实例参数 | 
| VPRSetParam | 设置VPR实例参数 | 
| VPRStartInst | 启动一个VPR实例 | 
| VPRWriteAudio | 写入音频 | 
| VPRStopInst | 停止一个VPR实例 | 
| VPRResetInst | 重置一个VPR实例 | 
# 返回值说明
对于开发接口,如果调用成功,返回值为int型的接口都会返回0,否则返回错误代码,错误代码参见aiot_errors.h。
# MorfeiCore函数调用
# morfeicore_start
函数原型
int morfeicore_start(const char *params, morfeicore_status_cb_t status_cb, void *user_data);
功能说明
初始化MorfeiCore服务,若同时使用基于MorfeiCore服务的其他SDK,则此函数只需调用一次。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| params[in] | 参数字符串 | 
| status_cb[in] | 回调函数 | 
| user_data[in] | 用户数据 | 
status回调接口声明
typedef int ( *morfeicore_status_cb_t)( int type, int status, int param1, const void *param2, void *user_data);
回调参数说明
| 参数名 | 参数解释 | 
|---|---|
| type[out] | 数据类型 | 
| status[out] | 状态信息 | 
| param1[out] | 保留参数 | 
| param2[out] | 保留参数 | 
| user_data[out] | 用户数据 | 
# morfeicore_stop
函数原型
int morfeicore_stop(void);
功能说明
逆初始化MorfeiCore服务。
返回值
如果函数调用成功返回0,失败返回错误码。
# morfeicore_ getversion
函数原型
const char* morfeicore_getversion(void);
功能说明
获取MorFeiCore 版本号。
返回值
如果函数调用成功返回引擎版本号。
# VPR函数调用
# VPRInit
函数原型
int VPRInit(struct aiotOS * param, void* reserved);
功能说明
初始化VPR引擎。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| param[in] | 保留使用的结构体参数 | 
| reserved[in] | 接口保留参数 | 
# VPRUnInit
函数原型
int VPRUninit(void* reserved);
功能说明
逆初始化VPR引擎。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| reserved[in] | 接口保留参数 | 
# VPRGetVersion
函数原型
char* VPRGetVersion(void);
功能说明
获取VPR引擎版本号。
返回值
如果函数调用成功返回引擎版本号,例如:2.0.1001。
# VPRLoadResource
函数原型
int VPRLoadResource(const char* res, int ressize, void* reserved);
功能说明
加载VPR资源。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| res[in] | 加载资源的首地址 | 
| resize[in] | 资源长度 | 
| reserved[in] | 接口保留参数 | 
# VPRUnloadResource
函数原型
int VPRUnloadResource(int restype, int resid);
功能说明
卸载VPR资源。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| restype[in] | 资源类型 | 
| resid[in] | 资源ID | 
# VPRRegister
函数原型
int VPRRegister(const char* srcres, int srcressize, const char* registerbuf, int registertype, int registerid, int registersize, char* targetres, int* targetsize);
功能说明
注册VPR资源。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| srcres[in] | 原始资源地址 | 
| srcressize[in] | 原始资源大小 | 
| registerbuf[in] | 注册音频数据地址(16k、16bit、单通道、pcm音频) | 
| registertype[in] | 注册资源类型 | 
| registered[in] | 注册资源ID | 
| registersize[in] | 注册资源大小 | 
| targetres[in] | 存储资源地址 | 
| targetsize[in/out] | 存储资源大小 | 
# VPRCreateInst
函数原型
int VPRCreateInst(VPR_HANDLE* pvprinst);
功能说明
创建VPR引擎实例。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| pvprinst[out] | 实例对象句柄二级指针 | 
# VPRDestoryInst
函数原型
int VPRDestoryInst(VPR_HANDLE vprinst);
功能说明
销毁VPR引擎实例。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
# VPRSetListener
函数原型
int VPRSetListener(VPR_HANDLE  vprinst, const int cbtype, const void* listener, void* userdata);
功能说明
设置VPR回调接口。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
| cbtype[in] | 参数类型:VPR_PARAM_RESULTCALLBACK        注册声纹回调函数 参数类型:IVW_PARAM_WAKEUPCALLBACK 注册唤醒回调函数 | 
| listener[in] | 回调函数指针 | 
| userdata[in] | 用户数据 | 
声纹信息回调接口声明
typedef int (*VprCallBack)(void *pUserParam, const char* pVprParam);
回调参数说明
| 参数名 | 参数解释 | 
|---|---|
| pUserParam[out] | 用户数据 | 
| pVprParam[out] | 声纹信息 | 
唤醒信息回调接口声明
typedef int (*IvwCallBack)(void *pUserParam, const char* pVprParam);
回调参数说明
| 参数名 | 参数解释 | 
|---|---|
| pUserParam[out] | 用户数据 | 
| pVprParam[out] | 唤醒信息 | 
# VPRGetParam
函数原型
int VPRGetParam(VPR_HANDLE vprinst, int paramtype, void* paramvalue, int* paramsize);
功能说明
获取VPR实例参数。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
| paramtype[in] | 参数类型: VPR_PARAM_ENGINE_MODE 说 明 :获取引擎工作模式 | 
| paramvalue[out] | 参数值 | 
| paramsize[in/out] | 参数长度 | 
# VPRSetParam
函数原型
int VPRSetParam(VPR_HANDLE vprinst, int paramtype, void* paramvalue, int paramsize);
功能说明
设置VPR实例参数。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
| paramtype[in] | 参数类型: VPR_PARAM_ENGINE_MODE 说 明 : 设置引擎模式 | 
| paramvalue[in] | 参数值 | 
| paramsize[in] | 参数长度 | 
# VPRStartInst
函数原型
int VPRStartInst(VPR_HANDLE vprinst);
功能说明
启动一个声纹实例。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
# VPRWriteAudio
函数原型
int VPRWriteAudio(VPR_HANDLE vprinst, const char* buf, int bufsize, int writestatus);
功能说明
写入音频。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
| buf[in] | 音频数据地址(16k、16bit、单通道、pcm音频) | 
| bufsize[in] | 传入音频长度,字节为单位 | 
| writestatus[in] | 当前数据状态标志 | 
# VPRStopInst
函数原型
int VPRStopInst(VPR_HANDLE vprinst);
功能说明
停止一个声纹实例。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
# VPRResetInst
函数原型
int VPRResetInst(VPR_HANDLE vprinst);
功能说明
重置一个声纹实例。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
| 参数名 | 参数解释 | 
|---|---|
| vprinst[in] | 实例对象句柄指针 | 
 
 